package clases;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;

public class Digrafo
{
	// Representa los arcos del digrafo
	public static class Arco
	{
		public int nodo;
		public double distancia;
		
		public Arco(int n, double d)
		{
			nodo = n;
			distancia = d;
		}

		@Override
		public int hashCode() {
			final int prime = 31;
			int result = 1;
			long temp;
			temp = Double.doubleToLongBits(distancia);
			result = prime * result + (int) (temp ^ (temp >>> 32));
			result = prime * result + nodo;
			return result;
		}

		@Override
		public boolean equals(Object obj) {
			if (this == obj)
				return true;
			if (obj == null)
				return false;
			if (getClass() != obj.getClass())
				return false;
			Arco other = (Arco) obj;
			if (Double.doubleToLongBits(distancia) != Double
					.doubleToLongBits(other.distancia))
				return false;
			if (nodo != other.nodo)
				return false;
			return true;
		}
	}
	
	// Listas de vecinos
	private ArrayList< Set<Arco> > _vecinos;
	
	// El constructor toma la cantidad de nodos
	public Digrafo(int nodos)
	{
		_vecinos = new ArrayList< Set<Arco> >(nodos);
		
		for(int i=0; i<nodos; ++i)
			_vecinos.add(new HashSet<Arco>());
	}
	
	// Agrega un arco
	public void setArco(int i, int j, double dist)
	{
		Arco nuevo = new Arco(j, dist);
		_vecinos.get(i).add(nuevo);
	}
	
	// Consulta la lista de todos los vecinos de un nodo
	public Set<Arco> getVecinos(int i)
	{
		return _vecinos.get(i);
	}

	// Cantidad de nodos
	public int getCantidadDeNodos()
	{
		return _vecinos.size();
	}
}
